<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
        Object.create 方法可以以指定对象为原型创建新的对象，同时可以为新的对象设置属性, 并对属性进行描述
            value : 指定值
            writable : 标识当前属性值是否是可修改的, 默认为 false
            configurable：标识当前属性是否可以被删除 默认为 false
            enumerable：标识当前属性是否能用for in 枚举 默认为 false
            get:   当获取当前属性时的回调函数
            set:   当设置当前属性时
    
        */
        var ob = {}; //声明一个空对象
        // 以ob为原型使用Object的create方法创建一个新对象
        // 在里面对象对象的属性进行描述
        var stu = Object.create(ob, {
            name:{
                value:"zhangsan",
                writable:false,  //是否可修改 默认 false
                configurable:false, // 是否可删除 默认false
                enumerable:true, // 是否可遍历（for in），默认false
            },
            age:{
                value:20,
                writable:true,  //是否可修改 默认 false
                configurable:false, // 是否可删除 默认false
                enumerable:false, // 是否可遍历（for in），默认false
            },
            sex:{
                set:function(v){ // 当设置sex属性值时自定调用此方法
                    //console.log("设置sex属性方法被调用");
                    if(v == "男" || v == "女"){
                        this.s = v;
                    } else {
                        // console.info("性别sex属性设置非法！");
                        // console.log("性别sex属性设置非法！");
                        // console.warn("性别sex属性设置非法！");
                        console.error("性别sex属性设置非法！");
                    }
                },
                get:function(){ // 当获取对sex属性值时自定调用此方法
                    //console.log("获取sex属性方法被调用");
                    return this.s;
                },
            }
        });

        // 修改和获取sex信息
        stu.sex = "女";
        console.log(stu.sex);
        stu.sex = "保密";
        console.log(stu.sex);

/*
        // 使用
        console.log(stu);
        stu.name = "wangwu"; // 不能修改属性值
        delete stu.age; // 不能删除对象的属性
        console.log(stu);

        // 使用for in遍历对象stu
        for (var key in stu){
            console.log(key, "=>", stu[key]);
        }
*/
        
    </script>
</body>
</html>